
/*
 * CasoRepresentacionInterno.java
 * Copyright 2010 Universidad Francisco de Paula Santander (UFPS).
 * Todos los Derechos Reservados.
 * Creado el 8/05/2010, 09:10:11 AM
 */


package com.ufps.cuatro.modelo.representacion;

import com.ufps.cuatro.modelo.analizador.ObjetoReflexion;

import com.ufps.cuatro.util.TipoPropiedad;

/**
 * <i><b>CasoRepresentacionInterno:</b></i> Representa un Caso de Representación 
 * para un tipo de dato contenido en otro tipo de dato especificamente este caso
 * se asocia a aquellos tipos que derivan de AbstractCollection.
 * 
 * @author Carlos A. Torres C. - Dolly E. Guerrero. <https://code.google.com/p/tesis4dor/>
 * @version 1.0 8/05/2010
 * @see CasoRepresentacion
 */
public class CasoRepresentacionInterno extends CasoRepresentacion{
    private static final long serialVersionUID = 5090232615560686021L;

    private transient ObjetoReflexion objReflexion;

    /**
     * Constructor por defecto.
     * @param objCaso Caso de Representación Padre.
     */
    public CasoRepresentacionInterno(CasoRepresentacion objCaso) {
        super(objCaso);
        this.eTipo = TipoPropiedad.eSimple;
        this.objReflexion = new ObjetoReflexion(objCaso.getObjClass());
    }

    /**
     * Constructor por defecto
     */
    public CasoRepresentacionInterno() {
        this.eTipo = TipoPropiedad.eSimple;
    }

    /**
     * Devulve la Referencia de la Propiedad Representada.
     * @return Referencia de la Propiedad Representada.
     */
    public ObjetoReflexion getObjReflexion() {
        return objReflexion;
    }

    /**
     * Establece la Referencia de la Propiedad Representada.
     * @param objReflexion Referencia de la Propiedad Representada.
     */
    public void setObjReflexion(ObjetoReflexion objReflexion) {
        this.objReflexion = objReflexion;
    }
    
    @Override
    public int compareTo(Object o) {
      try{
        CasoRepresentacionInterno obj = (CasoRepresentacionInterno) o;
        if(this.id > obj.id) {
            return 1;
        }
        else if(this.id < obj.id) {
            return -1;
        }
        else {
            return 0;
        }
        }catch(java.lang.NullPointerException ex){}
      return 0;
    }

//    @Override
//    public Object clone() {
//        CasoRepresentacionInterno objClon = null;
//        //Primero se Clona la Referencia Local
//        objClon = (CasoRepresentacionInterno) super.clone();
//        //Ahora se hace la Clonación Profunda
//        if(objReflexion != null){
//            ((CasoRepresentacionInterno)objClon).setObjReflexion((ObjetoReflexion)objReflexion.clone());
//        }        
//        return objClon;
//    }
    
    
}
